
◎ サウンドコントロール関数について

void slInitSound((Uint8 *)drv , (Uint32)drvsz , (Uint8 *)map , (Uint32)mapsz)
  機能 : サウンドドライバーのセットと、サウンドコントロールＣＰＵ(ＭＣ６８０００)
	 の初期化を行います。
	 サウンドドライバーは バージョン１.２９ｉ 以降に対応していますので、
	 それ以前のサウンドドライバーでは実行できません。
	 ライブラリの中に sddrv_129i と sizeof_129i が用意されていますので、これ
	 を使用するようにしてください。

Bool slBGMOn((Uint16)Song , (Uint8)Prio , (Uint8)Volume , (Uint8)Rate)
  機能 : ＢＧＭの演奏を開始します。ＢＧＭは常に発音管理番号０を使用します。
	 Volume は ０から１２７の範囲を、Rate はその Volume へのピッチを指定します。
	 Rateに０を指定するとすぐにその音量になります。
	 コマンドバッファに空きがない場合、FALSE を返します。

Bool slBGMPause()
  機能 : ＢＧＭの演奏を一時停止します。
	 コマンドバッファに空きがない場合、FALSE を返します。

Bool slBGMCont()
  機能 : 一時停止していたＢＧＭを再開します。
	 コマンドバッファに空きがない場合、FALSE を返します。

Bool slBGMOff()
  機能 : ＢＧＭの演奏を停止します。
	 コマンドバッファに空きがない場合、FALSE を返します。

Bool slBGMFade((Uint8)Volume , (Uint8)Rate)
  機能 : ＢＧＭの演奏音量を指定された大きさに徐々に変更します。
	 Rateに０を指定するとすぐにその音量になります。
	 コマンドバッファに空きがない場合、FALSE を返します。

Bool slBGMTempo((Sint16)Tempo)
  機能 : ＢＧＭのテンポを変更します。
	 コマンドバッファに空きがない場合、FALSE を返します。

Bool slBGMStat()
  機能 : ＢＧＭが再生中であるかを調べフラグを返します。
	 再生中(ポーズ中でも)の場合には１、停止していれば０が返ります。

Bool slSoundAllOff()
  機能 : すべてのサウンドシーケンスを停止します。
	 コマンドバッファに空きがない場合、FALSE を返します。

Bool slDSPOff()
  機能 : ＤＳＰを停止します。
	 コマンドバッファに空きがない場合、FALSE を返します。

Bool slSndVolume((Uint8)Volume)
  機能 : サウンド出力全体の音量をセットします。
	 Volume は ０から１２７(ただし、下位３ビットは無効)を指定します。
	 また、０の場合、音は出力されません。
	 コマンドバッファに空きがない場合、FALSE を返します。

Uint8 slSequenceOn((Uint16)Song , (Uint8)Prio , (Uint8)Volume , (Sint8)Pan)
  機能 : 効果音を指定された方向(Ｐａｎ)から演奏します。
	 Volumeは０から１２７の範囲、Ｐａｎは Left -127 ~ 0 ~ +127 の範囲で指定しま
	 す(ただし、ハードウエア上でＰａｎは３２段階であるため、下位３ビットが無効)
	 -128 を指定した場合、Ｐａｎの設定は無視されます。
	 コマンドバッファ及び、発音管理バッファに空きがない場合、FALSE を返します。
	 通常終了の場合には、発音管理番号を返します。

Bool slSequenceOff((Uint8)Seqnm)
  機能 : 指定された効果音の演奏を停止します。
	 コマンドバッファに空きがない場合、FALSE を返します。

Bool slSequenceFade((Uint8)Seqnm , (Uint8)Volume , (Uint8)Rate)
  機能 : 指定された効果音に対しボリュームコントロールをします。
	 発音管理番号、音量、ピッチを指定します。
	 コマンドバッファに空きがない場合、FALSE を返します。

Bool slSequenceTempo((Uint8)seqnm , (Sint16)Tempo)
  機能 : 指定された効果音に対しテンポを変更します。
	 発音管理番号、テンポを指定します。
	 コマンドバッファに空きがない場合、FALSE を返します。

Bool slSequencePause((Uint8)seqnm)
  機能 : 指定された効果音の演奏を一時停止します。
	 コマンドバッファに空きがない場合、FALSE を返します。

Bool slSequenceCont((Uint8)seqnm)
  機能 : 一時停止していた効果音を再開します。
	 コマンドバッファに空きがない場合、FALSE を返します。

Bool slSequencePan((Uint8)seqnm , (Uint8)Pan)
  機能 : 効果音の方向を指定します。
	 Ｐａｎは Left -127 ~ 0 ~ +127 の範囲で指定します(下位３ビットは無効)。
	 -128 を指定した場合、Ｐａｎの設定は無視されます。
	 コマンドバッファに空きがない場合、FALSE を返します。

Bool slSequenceReset((Uint8)seqnm)
  機能 : 指定された発音番号のボリューム、テンポ、Ｐａｎを初期化します。
	 ボリュームは最大、テンポは通常、Ｐａｎは非制御となります。
	 コマンドバッファに空きがない場合、FALSE を返します。

Bool slSequenceStat((Uint8)seqnm)
  機能 : 指定された発音番号のシーケンスが再生中であるかを調べフラグを返します。
	 再生中(ポーズ中でも)の場合には１、停止していれば０が返ります。

void *slSndMapChange((Uint8)map)
  機能 : カレントサウンドマップを変更します。
	 サウンドデータを転送後、ワーク領域の転送済みビットをセットしてください。
	 戻り値はパラメータをセットしたコマンドバッファのアドレスです。
	 コマンドバッファに空きがない場合、FALSE を返します。
  例)
	typedef struct sndmap{
	    Sint8	ID ;
	    Sint8	ST_Addr[3] ;
	    Sint8	LdFlag ;
	    Sint8	AR_Size[3] ;
	}SOUNDMAP ;

	void init_sound(){
	    SOUNDMAP	*smptrs , *smptrd ;

	    slWaitSound(slSndMapChange(0)) ;	/* カレントマップが切り替わるのを待つ */
	    smptrs = (SOUNDMAP *)soundmap ;
	    smptrd = (SOUNDMAP *)SoundCTRL ;
	    while(smptrs->ID >= 0){
		smptrd->LdFlag = -1 ;		/* Map Load Flag */
		smptrs++ ;
		smptrd++ ;
	    }
	    slDMACopy(sounddat , (void *)(SoundSeqBuf) , sizeof(sounddat)) ;
	}

Uint8 slSndSeqNum()
  機能 : 空いているサウンドシーケンス番号を返します。空きがない場合には０が、正常終了
	 した場合には１〜７が返されます。

Sint8 slSndPCMNum((Uint8)mode)
  機能 : 空いているＰＣＭチャンネル番号を返します。空きがない場合には−１が、正常終了
	 した場合には０〜７が返されます。
	 mode には _Stereo または _Mono を指定します。
	 ＰＣＭは８音まで鳴らすことができますが、ステレオ再生を行う場合、２音分必要に
	 なりますので、４つしか鳴らしていなくても、８音になっていることがありますので
	 注意してください。

void slWaitSound((void *)addr)
  機能 : 指定されたアドレスのデータが０になるまで待ちます。
	 サウンドドライバが、ファンクションを実行したことを表します。

Bool slCDDAOn((Uint8)LLevel , (Uint8)RLevel , (Sint8)LPan , (Sint8)RPan)
  機能 : ＣＤ-Ｄ/Ａを使用する際の、音量、方向を指定します。
	 Level は ０(Off)から１２７(下位４ビットは無効)、Ｐａｎは
	 Left -127 ~ 0 ~ +127 Right (ただし、下位３ビットは無効) で指定します。
	 コマンドバッファに空きがない場合、FALSE を返します。

Bool slCDDAOff()
  機能 : ＣＤ-Ｄ/Ａによる出力をやめます。
	 コマンドバッファに空きがない場合、FALSE を返します。

Sint8 slPCMOn(PCM *pdat, (void *)data , (Uint32)size)
  機能 : ＰＣＭ音源による音楽(効果音)の再生を行います。
	 data は 再生用のＰＣＭデータテーブルで、ステレオの場合には右チャンネル用と
	 左チャンネル用とを前半と後半とに分けてセットしておいてください。

	+---------------+
	|		|
	|  Ｒデータ	|
	| (frame * datasize byte)
	+---------------+
	|		|
	|  Ｌデータ	|
	|		|
	+---------------+

  ＰＣＭ型のデータは以下のような形式の構造体です。

    typedef struct {
	Uint8	mode ;		/* 再生モード */
	Uint8	channel ;	/* 再生チャンネル */
	Uint8	level ;		/* 再生レベル */
	Sint8	pan ;		/* 再生パン */
	Uint16	pitch ;		/* 再生ピッチ */
	Uint8	eflevelR ;	/* エフェクトレベル(右及び、モノラル用) */
	Uint8	efselectR ;	/* エフェクト番号(右及び、モノラル用) */
	Uint8	eflevelL ;	/* エフェクトレベル(左用) */
	Uint8	efselectL ;	/* エフェクト番号(左用) */
    } PCM ;

  再生モードは以下のものをセットします。
	<_Stereo または _Mono> 及び、<_PCM16Bit または _PCM8Bit>
  再生チャンネルは slPCMOn 関数がセットします(通常終了時の戻り値)。
  再生レベルは ０〜１２７(下位４ビットは無効) 、再生パンは
	Left -127 ~ 0 ~ +127 Right (下位３ビットは無効) をセットします。
  再生ピッチは１６ビットで、４４ＫＨｚに対するレートを指定します。
  エフェクトレベルは ０〜７、エフェクト番号は０〜１５を指定してください。

  関数の戻り値は通常終了の場合０〜７、コマンドバッファが足りない場合−１、
  ＰＣＭのチャンネルが空いていない場合−２、ＰＣＭ用のバッファが足りない場合
  −３を返します。
  この関数で開始されたＰＣＭ再生はデータ終了をもって停止します。

  注意 : 再生データが ＷｏｒｋＲＡＭ-Ｌ の領域にある場合、以下のような制約が
	 あります。
  ○ 再生データは偶数アドレスから配置されているものとして扱う。
     (アドレスの下位１ビットを０にして使用します)
     -> 偶数アドレスに配置して下さい。

  ○ 再生データがステレオで、８ビットの場合、左チャンネルのデータも偶数アドレ
     スから配置されているものとする。
     -> サンプル数を偶数にして下さい。

  ○ 再生データが８１９２フレーム以上の場合に、バッファをラッピングする際に
     ノイズが出ることがある。
     -> ８１９２フレームごとにデータを１バイト重複させて定義して下さい。
	ただし、先頭は１５３６(６００Ｈ)フレームオフセットされたところから始ま
	ります。したがって、重複させる最初のデータは６６５６(１Ａ００Ｈ)のデー
	タとなります。

Bool slPCMOff(PCM *pdat)
  機能 : 指定されたチャンネルのＰＣＭ再生を中止します。
	 コマンドバッファに空きがない場合、FALSE を返します。

Bool slPCMParmChange(PCM *pdat)
  機能 : ＰＣＭ再生用の各パラメータの変更をします。
	 コマンドバッファに空きがない場合、FALSE を返します。

Bool slPCMStat(PCM *pdat)
  機能 : 指定されたチェンネルのＰＣＭが再生中であるか調べ、フラグを返します。
	 再生中であれば１、終了していれば０が返ります。

Bool slSndEffect((Uint8)effect)
  機能 : ＤＳＰによるサウンドエフェクトを切り替えます。
	 コマンドバッファに空きがない場合、FALSE を返します。

Bool slSndMixChange((Uint8)tbank , (Uint8)mixno)
  機能 : 音色バンクに対応するミキサを切り替えます。
	 コマンドバッファに空きがない場合、FALSE を返します。

Bool slSndMixParmChange((Uint8)mixno , (Uint8)level , (Sint8)pan)
  機能 : ミキサのパラメータを変更します。
	 Level は０〜１２７(下位４ビットは無効)、Pan は
	Left -128 ~ 0 ~ +127 Right (下位３ビットは無効) をセットします。
	 コマンドバッファに空きがない場合、FALSE を返します。

Sint8 slSoundRequest(const char form[], ...)
  機能 : サウンドドライバに直接渡すデータをセットします。
	 form には これに続くデータの個々のサイズを文字列データで表します。
	 ただし、先頭のデータはファンクションコードとし、文字列には含みません。
	 戻り値は フォーム文字列に不当な文字があった場合、−２、
	 ワードデータを奇数アドレスからセットしようとした場合、−１を返します。
	 正常終了した場合０を返します。
  例)
	slSoundRequest("bbwwwbb" , SND_PCM_START , _Stereo|PCM16Bit , Level7<<5 ,
			StreamBuf >> 4 , StreamSize , Pitch , 0 , 0) ;
	この場合、SND_PCM_START がファンクションコードとなり、文字列には含まれない。
	_Stereo|PCM16Bit , Level7<<5 はそれぞれバイトデータ、
	StreamBuf>>4 , StreamSize , Pitch はそれぞれワードデータとしてサウンドドラ
	イバに渡される。

void slSoundAllPause()
  機能 : 演奏中の全シーケンス(ＢＧＭ含む)を一時停止します。(ただし、ＰＣＭストリー
	 ムは止まりません)

void slSoundAllCont()
  機能 : 一時停止中の全シーケンス(ＢＧＭ含む)を再開します。

void slSndFlush()
  機能 : サウンドコントロールバッファに残っているコントロールコマンドをサウンド
	 ドライバに出力します。
	 通常、サウンドコントロールコマンドはシステムが用意したバッファにセット
	 されており、バッファがいっぱいになるか、あるいは、slSynch() 関数が実行
	 された時にサウンドドライバに対し、出力されます。
	 ただし、以下の関数においてはバッファは直ちに出力されます。
		slSndMapChange()
		slDSPOff()
		slPCMOff()
		slSoundRequest()
		slSoundAllPause()
		slSoundAllCont()

	また、以下の関数を実行した場合、バッファ内のコマンドは破棄されます。
		slSoundAllOff()

